#include "JsonCheck.h"

bool CheckJsonKeyExit(Json::Value value, std::string stringKey)
{
    bool hr = false;
    if (value.isMember(stringKey.c_str()))
    {
        hr = true;
    }
    return hr;
}

bool CheckJsonValueType(Json::Value value, std::string stringKey, Json::ValueType type)
{
    bool hr = false;
    if (stringKey.empty())
    {
        switch (type)
        {
        case Json::nullValue:
            if (value.isNull())
            {
                hr = true;
            }
            break;
        case Json::intValue:
            if (value.isInt())
            {
                hr = true;
            }
            break;
        case Json::uintValue:
            if (value.isUInt())
            {
                hr = true;
            }
            break;
        case Json::realValue:
            if (value.isDouble())
            {
                hr = true;
            }
            break;
        case Json::stringValue:
            if (value.isString())
            {
                hr = true;
            }
            break;
        case Json::booleanValue:
            if (value.isBool())
            {
                hr = true;
            }
            break;
        case Json::arrayValue:
            if (value.isArray())
            {
                hr = true;
            }
            break;
        case Json::objectValue:
            if (value.isObject())
            {
                hr = true;
            }
            break;
        default:
            break;
        }
    }
    else
    {
        if (!value.isMember(stringKey.c_str()))
        {
            return hr;
        }
        switch (type)
        {

        case Json::nullValue:
            if (value[stringKey].isNull())
            {
                hr = true;
            }
            break;
        case Json::intValue:
            if (value[stringKey].isInt())
            {
                hr = true;
            }
            break;
        case Json::uintValue:
            if (value[stringKey].isUInt())
            {
                hr = true;
            }
            break;
        case Json::realValue:
            if (value[stringKey].isDouble())
            {
                hr = true;
            }
            break;
        case Json::stringValue:
            if (value[stringKey].isString())
            {
                hr = true;
            }
            break;
        case Json::booleanValue:
            if (value[stringKey].isBool())
            {
                hr = true;
            }
            break;
        case Json::arrayValue:
            if (value[stringKey].isArray())
            {
                hr = true;
            }
            break;
        case Json::objectValue:
            if (value[stringKey].isObject())
            {
                hr = true;
            }
            break;
        default:
            break;
        }
    }
    return hr;
}
